// 基于网络请求式的服务
#include "compile_run.hpp"
#include <jsoncpp/json/json.h>
#include "../comm/httplib.h"
using namespace ns_compile_and_run;
using namespace httplib;

void Usage(std::string proc)
{
    std::cerr << "Usage: " << "\n\t" << proc << " port" << std::endl;
    // 使用说明
}
int main(int argc, char *argv[])
{
    // 将编译服务打包成一个网络服务
    // cpp-httplib
    if (argc != 2)
    {
        Usage(argv[0]);
        return 1;
    }

    Server svr;
    // svr.Get("/hello",[](const Request&req,Response&resp){
    //     resp.set_content("hello httplib,你好 httplib","text/plain;charset=utf-8");
    //     //get基本测试
    // });

    svr.Post("/compile_and_run", [](const Request &req, Response &resp)
             {
        //测试通过post请求 客户端发送的req.body in_json串 Start后 把out_json写到resp中返回给用户
        std::string in_json=req.body;
        std::string out_json;
        if(!in_json.empty())
        {
            CompileAndRun::Start(in_json,&out_json);
            resp.set_content(out_json,"application/json;charset=utf-8");
        } });
    // svr.set_base_dir("./wwwroot");//测试网页
    // svr.listen("0.0.0.0",8080);//启动 http 服务
    svr.listen("0.0.0.0", atoi(argv[1])); // 启动 http 服务

    return 0;
}

// int main()
// {
//     // 将编译服务打包成一个网络服务
//     // cpp-httplib

//     // 通过http 让client 上传一个json string
//     // in_json :{"code":"#include...","input":" ","cpu_limit":"1","mem_limit":"1024"};
//     // out_json :{"status":"0","reason":"",["stdout":"","stderr":""]};
//     std::string in_json;

//     Json::Value in_value;
//     //R"()" raw string
//     in_value["code"] = R"(#include<iostream>
//     int main(){
//         std::cout << "你好" << std::endl;
//         int a=10;
//         a/=0;
//         return 0;
//     })";
//     in_value["input"] = "";
//     in_value["cpu_limit"] = 1;
//     in_value["mem_limit"] = 20*1024;
//     // 序列化

//     Json::StyledWriter writer;
//     in_json = writer.write(in_value);
//     // 反序列化
//     std::cout << in_json << std::endl;
//     std::string out_json;

//     CompileAndRun::Start(in_json, &out_json);
//     std::cout << out_json << std::endl;

//     return 0;
// }